package leetcode.栈队列堆;

import java.util.Stack;

/**
 * 解答：
 * 利用栈的先进后出的特点
 * 如果括号是正确关闭的，那么在栈里面一定有左括号的顺序
 * 一旦遇到左括号，一律把与之对应的右括号入栈
 * 一旦遇到非左括号，那么肯定就是遇到了右括号，出栈此右括号
 * 出栈后若不等于当前的右括号，则false
 */
public class Test20有效的括号 {

    public static boolean isValid(String s) {
        if (s.isEmpty())
            return true;
        Stack<Character> stack = new Stack<>();
        for (char c : s.toCharArray()) {
            if (c == '(')
                stack.push(')');
            else if (c == '{')
                stack.push('}');
            else if (c == '[')
                stack.push(']');
            else if (stack.isEmpty() || stack.pop() != c)
                return false;
        }
        // 栈最后为空表明括号匹配成功，true
        return stack.isEmpty();
    }


    public static void main(String[] args) {
        System.out.println(isValid("([}])"));
    }
}
